// 注释
// 单行注释
/*
 * 多行注释
 * 多行注释
 */
// 关键字
// break, case, catch, continue, debugger, default,
// delete, do, else, finally, for, function, if, in,
// instanceof, new, return, switch, this, throw, try,
// typeof, var, void, while, with, null, true, false,
// undefined, NaN, Infinity

// 保留字 保留字不能用作标识符
// abstract, boolean, byte, char, class, const, debugger,
// double, enum, export, extends, final, float, goto,
// implements, import, int, interface, long, native,
// package, private, protected, public, short, static,
// super, synchronized, throws, transient, volatile

// 标识符
// 以字母、下划线、美元符号开头，后面可以跟字母、下划线、美元符号、数字
// 不能把关键字、保留字用作标识符
// 严格模式中，标识符必须以字母、下划线、美元符号开头
// 严格模式中，标识符不能使用特殊字符
// 严格模式中，不允许标识符中有空格
// 严格模式中，标识符不能使用关键字、保留字

// 字符集
// Unicode字符集
// 包含了几乎所有国家的文字
// 2字节编码表示一个字符
// JS的标识符其实可以为中文，但是不建议使用


// 变量
// 变量是松散类型的，可以用来保存任何类型的数据
// 变量在定义时不需要指定类型
// 变量在使用前必须先赋值
// 变量声明提升
// 变量提升只提升声明，不提升赋值
// 变量提升后，会给变量设置默认值undefined
// 变量提升后，变量的声明会被提升到代码头部，赋值不会提升
var a = 10; // 变量声明提升
console.log(a); // 10
var a; // 变量声明提升
console.log(a);
var b, c; // 变量声明提升
var d=100;
console.log(d);
var e = 200,f;
let g=500;

// 常量的声明
// 用const声明的变量是常量，常量的值不能修改
// 常量必须声明后使用，否则会报错
const PI = 3.1415926;
console.log(PI);
// PI = 3.14; // 报错
// PI = PI + 10; // 报错
// PI++; // 报错
